#include "thread.h"
#include <QMutexLocker>
//公共访问资源-定义
int Thread::num=0;
//公共互斥锁-定义
QMutex Thread::mutex;

Thread::Thread()
{

}

void Thread::run()
{
    for(int i=0;i<5000;i++)
    {
        QMutexLocker locker(&Thread::mutex);
        //mutex.lock();//加锁
        num++;
        //mutex.unlock();//解锁
    }
    /*
     * num++操作是一个两个线程都会访问的公共变量
     * 如果不加锁，并发执行时，就可能t1对此公共变量修改了一半，t2也对此公共变量进行修改
     * 就容易出现问题。由于num++操作不是原子的
     *
     * 加锁之后，t1拿到锁之后，执行++操作完毕后，再执行解锁，
     * 在t1拿到锁后，t2申请锁时，t2就会阻塞等待，等到t1释放锁之后，t2才会从阻塞中被唤醒，才可以申请锁成功进而执行++操作
    */
}
